/**
 * 用户信息接口返回类型（根据实际登录返回数据定义）
 */
export interface UserInfoDetail {
  /** 租户ID */
  tenantId: string
  /** 租户名称 */
  tenantName: string
  /** 部门ID */
  departId: string
  /** 机构ID */
  institutionId: string
  /** 用户ID */
  id: string
  /** 用户名 */
  userName: string
  /** 真实姓名 */
  realName: string
  /** 员工ID */
  employeeId: string
  /** 公司代码 */
  sysCompanyCode: string
  /** 组织代码 */
  sysOrgCode: string
  /** 系统类型 */
  systemType: string | null
  /** 头像 */
  avatar: string | null
  /** 简称 */
  abbreviation: string
  /** 是否管理员 */
  admin: boolean
}

/**
 * 令牌信息接口返回类型（根据实际登录返回数据定义）
 */
export interface TokenInfoDetail {
  /** 令牌名称 */
  tokenName: string
  /** 令牌值 */
  tokenValue: string
  /** 是否登录 */
  isLogin: boolean
  /** 登录ID */
  loginId: string
  /** 登录类型 */
  loginType: string
  /** 令牌超时时间（秒） */
  tokenTimeout: number
  /** 会话超时时间（秒） */
  sessionTimeout: number
  /** 令牌会话超时时间（秒） */
  tokenSessionTimeout: number
  /** 令牌活动超时时间（秒） */
  tokenActivityTimeout: number
  /** 登录设备 */
  loginDevice: string
  /** 标签 */
  tag: string | null
}

/**
 * 登录返回的信息
 */
export interface IAuthLoginRes {
  /** 用户信息 */
  userInfo: UserInfoDetail
  /** 令牌信息 */
  tokenInfo: TokenInfoDetail
}

/**
 * 用户信息 - 用于统一用户信息存储格式
 */
export interface IUserInfoRes extends UserInfoDetail {}

// 认证存储数据结构
export interface AuthStorage {
  tokens: IAuthLoginRes
  userInfo?: IUserInfoRes
  loginTime: number // 登录时间戳
}

/**
 * 验证登录响应是否有效
 * @param tokenRes 登录响应数据
 * @returns 是否为有效的登录响应
 */
export function isValidLoginRes(tokenRes: any): tokenRes is IAuthLoginRes {
  return tokenRes
    && typeof tokenRes === 'object'
    && 'userInfo' in tokenRes
    && 'tokenInfo' in tokenRes
    && tokenRes.tokenInfo.isLogin === true
}
